perm filename ROMANL.MF[CM,DEK]4 blob
sn#798078 filedate 1985-07-09 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00029 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 % Computer Modern Roman lower case:
C00004 00003 cmchar "The letter a"
C00008 00004 cmchar "The letter b"
C00011 00005 cmchar "The letter c"
C00014 00006 cmchar "The letter d"
C00017 00007 cmchar "The letter e"
C00020 00008 cmchar "The letter f"
C00022 00009 iff not variant_g: cmchar "The letter g"
C00026 00010 iff variant_g: cmchar "Variant letter g"
C00030 00011 cmchar "The letter h"
C00032 00012 cmchar "The letter i"
C00034 00013 cmchar "The letter j"
C00037 00014 cmchar "The letter k"
C00041 00015 cmchar "The letter l"
C00042 00016 cmchar "The letter m"
C00045 00017 cmchar "The letter n"
C00047 00018 cmchar "The letter o"
C00048 00019 cmchar "The letter p"
C00051 00020 cmchar "The letter q"
C00054 00021 cmchar "The letter r"
C00056 00022 cmchar "The letter s"
C00060 00023 cmchar "The letter t"
C00067 00024 cmchar "The letter u"
C00070 00025 cmchar "The letter v"
C00073 00026 cmchar "The letter w"
C00078 00027 cmchar "The letter x"
C00086 00028 cmchar "The letter y"
C00090 00029 cmchar "The letter z"
C00093 ENDMK
C⊗;
% Computer Modern Roman lower case:
% These letters were originally coded by D. E. Knuth in November, 1979,
% inspired by the Monotype faces used in {\sl The Art of Computer Programming}.
% Sans serif designs by Richard Southall were added in April, 1982.
% The programs were revised for the new \MF\ conventions in 1985.
% Character codes \0141 through \0172 are generated.
cmchar "The letter a";
beginchar("a",9u#,x_height#,0);
bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
adjust_fit(0,serif_fit#);
pickup fine.nib; top y3r=h+vround 1.5oo;
if serifs: pos1(flare,180); pos2(hair,180);
pos3(vair,90); lft x1r=round max(u,2.1u-.5flare); x3=.5w-.5u;
y1=min(bh+.5flare+2vair+2,.9[bh,h]-.5flare);
bulb(3,2,1); % bulb
else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
pos3(1/8[vair,thin_join],90);
x3=.5w-.2u; top y1r=vround(.82[bh,top y3r]);
filldraw stroke term.e(3,1,left,.9,4); fi % terminal
pos4(stem,0); rt x4r=round(w-2.5u+.5stem); y4=1/3[bh,h];
pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
filldraw stroke super_arc.e(3,4)&z4e..z5e; % arc and stem
pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
pos7(round(curve-2stem_corr),180);
lft x7r=round max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
pos9(thin_join,360); z9l=z5l;
(x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
{{interim superness:=more_super;
filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
if serifs: numeric shaved_stem; shaved_stem=round(stem-3stem_corr);
if hair#+.5stem#>1.5u#: pickup tiny.nib;
pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
pos11(shaved_stem,0); rt x11r=round(w-.25u); bot y11=0;
filldraw stroke z5'e---z10e...z11e{right}; % foot
else: pickup crisp.nib;
pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
pos12(hair,180); rt x12l=round(w-.1u); y12=max(y10,y11+vair);
pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
(x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi % hook
else: numeric shaved_stem; shaved_stem=round(stem-stem_corr); pickup tiny.nib;
pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
pos10(shaved_stem,0); x10=x5'; bot y10=0;
filldraw stroke z5'e--z10e; fi % base of stem
penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar;
cmchar "The letter b";
beginchar("b",10u#+serif_fit#,asc_height#,0);
italcorr .5x_height#*slant+min(.5curve#-u#,-.25u#);
adjust_fit(serif_fit#,0);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
lft x1l=round(2.5u-.5stem'); top y1=h;
numeric stem_edge; stem_edge=rt x2r;
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
pos4(vair,90); pos5(curve,0);
pos6(vair,-90); penpos7(x3l-x3r,-180);
rt x3l=1/3[rt x2,stem_edge]; y3=1/8[bar_height,x_height];
x4l=w-4.5u; top y4r=x_height+oo;
rt x5r=round min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=-oo;
x7=x3; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x4,x5r]);
(x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x6,x5r]);
filldraw stroke z3e{up}...pulled_arc.e(4,5)&pulled_arc.e(5,6)...{up}z7e; % bowl
y0=ypart(((stem_edge,h)..(stem_edge,0))intersectionpoint(z3l{up}...{right}z4l));
y2=ypart(((stem_edge,h)..(stem_edge,0))intersectionpoint(z6l{left}...{up}z7l));
pickup tiny.nib; filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
z7'=z2; x8l=x7'l; bot y8=0;
filldraw stroke z7'e--z8e; % point
if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); fi % upper serif
penlabels(0,1,2,3,4,5,6,7,8); endchar;
cmchar "The letter c";
beginchar("c",8u#,x_height#,0);
italcorr x_height#*slant-.2u#;
adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
pickup fine.nib; pos2(vair',90); pos4(vair',270);
x2=x4=.5(w+u); top y2r=vround(h+1.5oo); bot y4r=-oo;
pos3(curve,180); lft x3r=round max(.6u,1.35u-.5curve); y3=.5h;
if serifs: pos1(hair,0); pos0(flare,0);
y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,h]-.5flare);
rt x1r=round(w-.7u); bulb(2,1,0); % bulb
pos5(hair,0); rt x5r=round(w-.5u);
y5=max(good.y(.5bar_height-.9),y4l+vair');
(x,y4l)=whatever[z4r,z5l]; x4l:=x;
filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
& pulled_super_arc.e(3,4)(.5superpull)
& z4e{right}..tension .9 and 1..{x5-x4,5(y5-y4)}z5e; % arc and lower terminal
else: pos1(4/7[vair',flare],80);
rt x1r=round(w-.6u); top y1r=vround(.82[bar_height,top y2r]);
filldraw stroke term.e(2,1,right,.8,4); % upper terminal
pos5(.6[vair',flare],275); rt x5r=round(w-.5u);
y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
& pulled_super_arc.e(3,4)(.5superpull)
& z4e{right}..tension .9 and 1..z5e; fi % arc and lower terminal
penlabels(0,1,2,3,4,5); endchar;
cmchar "The letter d";
beginchar("d",10u#+serif_fit#,asc_height#,0);
italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
adjust_fit(0,serif_fit#);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
rt x1r=round(w-2.5u+.5stem'); top y1=h;
numeric stem_edge; stem_edge=lft x2l;
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
pos4(vair,90); pos5(curve,180);
pos6(vair,270); penpos7(x3r-x3l,360);
lft x3l=1/3[lft x2,stem_edge]; y3=1/8[bar_height,x_height];
x4l=4.7u; top y4r=x_height+oo;
lft x5r=round max(1.35u-.5curve,.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=-oo;
x7=x3; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
filldraw stroke z3e{up}...pulled_arc.e(4,5)
& pulled_arc.e(5,6)...{up}z7e; % bowl
y0=ypart(((stem_edge,h)..(stem_edge,0))intersectionpoint(z3l{up}...{left}z4l));
pickup tiny.nib; bot y2=if serifs:-min(oo,serif_drop) else: 0 fi;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
sloped_serif.r(2,0,b,1/3,jut,min(oo,serif_drop)); fi % lower serif
penlabels(0,1,2,3,4,5,6,7); endchar;
cmchar "The letter e";
beginchar("e",7.25u#+max(.75u#,.5curve#),x_height#,0);
italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
numeric left_curve,right_curve;
left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
pickup tiny.nib; pos1(right_curve,0);
pos2(vair,90); pos3(left_curve,180);
y1=good.y bar_height; top y2r=h+vround 1.5oo; y0l=bot y1;
rt x1r=round min(w-.5u,w-u+.5right_curve);
lft x3r=round max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
{{interim superness:=more_super;
filldraw stroke super_arc.e(1,2)}}; % right bowl
y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
if serifs: pos4(vair',270); pos5(hair,360);
y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
(x,y4l)=whatever[z4r,z5]; x4l:=x;
filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
else: pos4(vair,270);
filldraw stroke super_arc.e(2,3) & super_arc.e(3,4); % left bowl and arc
pickup fine.nib; pos4'(vair,270); z4=z4';
pos5(.5[vair,flare],275); rt x5r=round(w-.6u);
y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
filldraw stroke z4'e{right}..z5e; fi % terminal
path testpath; testpath=super_arc.l(2,3) & super_arc.l(3,4);
y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
forsuffixes $=l,r: x0$=xpart
(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
fill stroke z0e--z1'e; % crossbar
penlabels(0,1,2,3,4,5); endchar;
cmchar "The letter f";
beginchar("f",5.5u#,asc_height#,0);
italcorr asc_height#*slant+if serifs:flare#-.25u# else: 1.25u# fi;
adjust_fit(stem_shift#,if monospace: .5u# else:-stem_shift# fi);
pickup tiny.nib; pos1(stem',0); lft x1l=round(2.5u-.5stem');
pickup fine.nib; numeric bulb_diam;
if serifs: bulb_diam=round(.8[stem,flare]);
pos2(bulb_diam,0); y2+.5bulb_diam=.9[x_height,h+oo];
if monospace: rt x2r=round(w-.5u) else: lft x2l=round(w-.75u+.5) fi;
else: pos2(5/7[vair,flare],90); top y2r=h;
rt x2=round(if monospace:w-.5u else:w+.75u fi); fi
f_stroke(1,2,a,b,c,jut,if not monospace:1.25fi\\ jut); % stem, terminal, serif
pickup crisp.nib; top y3r=top y4r=x_height; lft x3=round(.5u)-1;
pos3(bar,90); pos4(bar,90);
rt x4=round(w-if monospace:.75 else:1/3 fi\\ u);
filldraw stroke z3e..z4e; % bar
penlabels(1,2,3,4); endchar;
iff not variant_g: cmchar "The letter g";
beginchar("g",9u#,x_height#,desc_depth#);
italcorr x_height#*slant+.25u#;
adjust_fit(0,0);
numeric light_vair,light_curve,loop_top,loop_side;
light_vair=vround(.5[thin_join,vair]+vair_corr);
light_curve=max(fine.breadth,round(curve-3stem_corr));
loop_top=vround(.77[vair,fudged.stem]);
loop_side=round(.64[vair,fudged.stem]);
pickup fine.nib; pos1(light_vair,90);
pos2(light_curve,180); pos3(light_vair,270);
pos4(light_curve,360); pos11(loop_top,90);
y11r=good.y(y11r+.15bar_height-y11); x1=x3=.5[x2,x4]; y2=y4=.5[y1,y3];
lft x2r=round(1.75u-.5light_curve); rt x4r=round(w-2.75u+.5light_curve);
top y1r=h+oo; y3r=good.y(y3r+.27[top y11r,bot y1l]-y3);
filldraw stroke pulled_arc.e(1,2) & pulled_arc.e(2,3); % left half of bowl
filldraw stroke pulled_arc.e(3,4) & pulled_arc.e(4,1); % right half of bowl
x0=superness[x1r,x4r]; y0=superness[y4r,y1r]; % NE point on the super bowl
x8'=superness[x3r,x2r]; y8'=superness[y2r,y3r]; % SW point on the super bowl
x8''=superness[x3,x2]; y8''=superness[y2,y3];
pos0(thin_join,angle(z0-z8')+90);
pos8(thin_join,angle(z0-z8')-90); z8=.618[z8',z8''];
if serifs: pos5(vair,90);
pos6(hair,0); pos7(.5[hair,flare],0); x5=.75[x0,x6]; top y5r=h+o;
rt x6r=round(w-.25u); y6+(.5[hair,flare])/2=.95[bar_height,h]+oo;
filldraw stroke z0e..{right}z5e; bulb(5,6,7); % ear
else: pos5(vair',100); top y5r=h+oo;
rt x5l=round(w-.25u); y5l:=good.y y5l;
filldraw z0l{z5-z0}..z5l--z5r{left}..{curl 1}z0r--cycle; fi % ear
pos10(loop_top,90); x10=x8+.75u; y10=y11;
pos12(loop_side,0); pos13(light_vair,-90);
pos14(loop_side,-180); pos10'(.5[thin_join,vair],-270);
rt x12r=round max(w-1.25u+.5loop_side,w-.5u); y12=y14=.5[y11,y13];
x11=x13=.5w; bot y13r=-d-oo-1; x14=w-x12; z10'l=z10l;
filldraw stroke z8e{z8-z0}..z10e---z11e; % link
filldraw stroke {{interim superness:=hein_super; super_arc.e(11,12)}}
& super_arc.e(12,13) & super_arc.e(13,14) & super_arc.e(14,10'); % loop
penlabels(0,1,2,3,4,5,6,7,8,10,11,12,13,14); labels(8',8''); endchar;
iff variant_g: cmchar "Variant letter g";
beginchar("g",10u#+serif_fit#,x_height#,desc_depth#);
italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi;
adjust_fit(0,serif_fit# if serifs: -.5u# fi);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
rt x1r=round(w-2.5u+.5stem');
numeric stem_edge; stem_edge=lft x2l;
path edge; edge=(stem_edge,h)..(stem_edge,0);
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
pos4(vair,90); pos5(curve,180);
pos6(vair,270); penpos7(x3r-x3l,360);
lft x3l=2/3[lft x2,stem_edge]; y3=bar_height;
x4l=4.7u; top y4r=x_height+oo;
lft x5r=round max(1.35u-.5curve,.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=vround 1/3vair;
lft x7l=stem_edge; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5)
&super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl
y1=ypart(edge intersectionpoint(z3l{up}...{left}z4l));
y0=ypart(edge intersectionpoint(z7l{down}...{left}z6l));
pickup tiny.nib; bot y2=if serifs: -.25d else: 0 fi;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib;
pos8(round(hair-stem_corr),0); pos7'(stem',0);
z7'=z1; x8r=x7'r; top y8=h+oo;
filldraw stroke z7'e--z8e; % point
if serifs: pickup tiny.nib;
pos9(vair,-90); x9=.5[x2,x10]; bot y9r=-d-o-1;
pos10(hair,-180); lft x10r=round u; y10=-.75d+.5flare;
pos11(flare,-180); z11r=z10r;
bulb(9,10,11); filldraw stroke super_arc.e(2,9); % tail
else: pickup fine.nib; pos2'(stem,0); z2'=z2;
z2''r=z2'r; z2''=z2'; z2''l=(x2'l,0);
pos9(vair,-90); x9=4.5u; bot y9r=-d-o-1;
pos10(.5[vair,flare],-90); lft x10=round 1.25u;
y10r=good.y(-5/6d); y10l:=good.y y10l;
filldraw stroke z2'e..z2''e&super_arc.e(2'',9)
& z9e{left}..tension .9 and 1..z10e; fi % tail
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;
cmchar "The letter h";
beginchar("h",10u#,asc_height#,0);
italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
pickup tiny.nib; pos1(stem,0); pos2(stem,0);
pos1'(stem',0); pos2'(stem',0); pos3(stem,0);
lft x1l=round(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3=w-x1;
top y1=h; bot y2=0; y1=y1'; y2=y2';
filldraw stroke z1'e..z2'e; % left stem
h_stroke(2,a,3,4); % arch and right stem
if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif
numeric inner_jut; pickup tiny.nib;
if rt x2r+jut+.5u+1≤lft x4l-jut: inner_jut=jut;
else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif
dish_serif(4,3,e,1/3,inner_jut,f,1/3,jut); fi % lower right serif
penlabels(1,2,3,4); endchar;
cmchar "The letter i";
numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#);
beginchar("i",5u#,min(asc_height#,10/7x_height#+.5dot_diam#),0);
define_whole_blacker_pixels(dot_diam);
italcorr h#*slant-serif_fit# + .5dot_diam# -2u#;
adjust_fit(serif_fit#+stem_shift# if monospace:+.25u#fi,serif_fit#-stem_shift#);
pickup tiny.nib; pos1(stem',0); pos2(stem',0);
if odd(w-stem'): mod_width; fi
lft x1l=round(.5w-.5stem'); x1=x2;
top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
filldraw stroke z1e..z2e; % stem
pos3(dot_diam,0); pos4(dot_diam,90);
if serifs: x3r=max(x1r,x1+.5(dot_diam-tiny)-.2jut) else: x3=x1-.5 fi;
top y4r=h+1;
if bot y4l-top y1<slab: y4l:=min(y4r-eps,y1+tiny+slab); fi
x3=x4; y3=.5[y4l,y4r]; dot(3,4); % dot
if serifs: sloped_serif.l(1,2,a,1/3,.95jut,serif_drop); % upper serif
dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi % lower serif
penlabels(1,2,3,4); endchar;
cmchar "The letter j";
numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#);
beginchar("j",5.5u#,min(asc_height#,10/7x_height#+.5dot_diam#),desc_depth#);
define_whole_blacker_pixels(dot_diam);
italcorr h#*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+2stem_shift# if monospace:+.5u# fi,
serif_fit#-2stem_shift# if monospace:-.5u# fi);
pickup tiny.nib; pos1(stem',0); pos2(stem',0);
rt x1r=round(.5w+.25u+.5stem'); x1=x2;
top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=-1/3d;
filldraw stroke z1e..z2e; % stem
pos3(dot_diam,0); pos4(dot_diam,90);
x3r=x1r; top y4r=h+1;
if bot y4l-top y1<slab: y4l:=min(y4r-eps,y1+tiny+slab); fi
x3=x4; y3=.5[y4l,y4r]; dot(3,4); % dot
if serifs: sloped_serif.l(1,2,a,1/3,1.1jut,serif_drop); % upper serif
pickup tiny.nib; pos5(vair,-90); pos6(hair,-180); pos7(flare,-180);
x5=.5[x2,x6r]; bot y5r=-d-oo; y6-.5flare=-.88d;
if monospace: lft x6r=0 else: z6r=z7r; rt x7l=floor .75u fi;
(x,y5r)=whatever[z5l,z2l]; x5r:=max(x,.5[x6r,x5]);
filldraw stroke z2e{down}...z5e{left}; bulb(5,6,7); % arc and bulb
else: pickup fine.nib; pos2'(stem',0); z2'=z2;
pos6(.2[vair,stem'],-90); pos7(vair,-90);
lft x7r=round(-.75u); bot y7r=vround 5/6(-d-oo);
(x,y7l)=whatever[z7r,z3]; x7l:=x;
z5r=z2'r; (x2'l,y5l)=whatever[z7l,z5r]; x5l=x2'l; y5=y5r;
x6r=.5[x7r,x5r]; x6l:=.5[x7l,x5l]; bot y6r=-d-oo;
filldraw stroke z2'e..{down}z5e & super_arc.e(5,6)
& z6e{left}..z7e; fi % arc and terminal
penlabels(1,2,3,4,5,6,7); endchar;
cmchar "The letter k";
beginchar("k",9.5u#,asc_height#,0); less_rounded;
italcorr x_height#*slant-.2u#;
adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib;
numeric right_jut,stem[],alpha[];
stem1=max(tiny.breadth,round(fudged.stem-stem_corr));
stem2=max(tiny.breadth,round(fudged.stem-2stem_corr));
stem3=max(tiny.breadth,round(fudged.hair-4stem_corr));
stem4=max(tiny.breadth,round(fudged.stem-3stem_corr));
if serifs: right_jut=.6jut; else: right_jut=.4tiny; fi
pos1(stem1,0); pos2(stem2,0); top y1=h; bot y2=0;
lft x1l=lft x2l=round(2.5u-.5stem1);
top y3=x_height; rt x3r=round(r-letter_fit-.7u-right_jut);
bot y6=0; rt x6r=round(r-letter_fit-.3u-right_jut);
x4=x11=x1; y4=.7bar_height; y11=y3;
alpha1=diag_ratio(1,.5(stem3-tiny),y3-y4,x3r-x4);
alpha2=diag_ratio(1,.5(stem4-tiny),y11-y6,x6r-x1);
penpos3(alpha1*(stem3-tiny),0); penpos4(whatever,-90);
z5=.5[z5l,z5r]; penpos6(alpha2*(stem4-tiny),0);
forsuffixes $=l,r: y3'$=x_height; y6'$=0; z4$=z3'$+whatever*(z3-z4);
z5$=z6'$+whatever*(z11-z6)=whatever[z3,z4]; endfor
z3'r=z3r+penoffset z3-z4 of currentpen+whatever*(z3-z4);
% we have also |z3'l=z3l+penoffset z4-z3 of currentpen+whatever*(z3-z4)|;\]
z6'r=z6r+penoffset z11-z6 of currentpen+whatever*(z11-z6);
z6'l=z6l+penoffset z6-z11 of currentpen+whatever*(z11-z6);
fill z4r--diag_end(4r,3'r,1,.5,3'l,4l)--z4l--cycle; % upper diagonal
fill z5l--diag_end(5l,6'l,.5,1,6'r,5r)--z5r--cycle; % lower diagonal
pos0(stem1,0); pos0'(stem2,0); y0=y0'; x0=x1; x0'=x2;
rt z0r=whatever[z3,z4]; filldraw stroke z1e..z0e--z0'e..z2e; % stem
if serifs: numeric inner_jut;
if rt x2r+jut+.5u+1≤lft x6l-jut: inner_jut=jut;
else: rt x2r+inner_jut+.5u+1=lft x6l-inner_jut; fi
sloped_serif.l(1,0,a,1/3,jut,serif_drop); % upper stem serif
dish_serif(2,0',b,1/3,jut,c,1/3,inner_jut); % lower stem serif
dish_serif(3,4,d,2/3,1.4jut,e,1/2,right_jut)(dark); % upper diagonal serif
dish_serif(6,5,f,1/2,inner_jut,g,1/3,right_jut)(dark);fi % lower diagonal serif
penlabels(0,1,2,3,4,5,6,11); endchar;
cmchar "The letter l";
beginchar("l",5u#,asc_height#,0); l_width#:=5u#+2serif_fit#;
italcorr asc_height#*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
pickup tiny.nib; pos1(stem',0); pos2(stem',0);
if odd(w-stem'): mod_width; fi
lft x1l=round(.5w-.5stem'); x1=x2; top y1=h; bot y2=0;
filldraw stroke z1e..z2e; % stem
if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper serif
dish_serif(2,1,b,1/3,jut,c,1/3,jut); fi % lower serif
penlabels(1,2); endchar;
cmchar "The letter m";
beginchar("m",15u#,x_height#,0);
italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
numeric shaved_stem; shaved_stem=round(mfudged.stem-2stem_corr);
pickup tiny.nib; pos1(mfudged.stem,0); pos2(mfudged.stem,0);
pos1'(shaved_stem,0); pos2'(shaved_stem,0);
pos3(mfudged.stem,0); pos5(mfudged.stem,0);
lft x1l=round(2.5u-.5stem); x1l=x1'l=x2l=x2'l;
lft x3l=round(.5w-.5stem); x5-x3=x3-x1;
if not monospace: r:=x5+x1-l; fi % change width for better fit
top y1=h+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2';
filldraw stroke z1'e..z2'e; % left stem
h_stroke(2,a,3,4); % left arch and middle stem
h_stroke(4,b,5,6); % right arch and right stem
if serifs: sloped_serif.l(1',2',c,1/3,jut,serif_drop); % upper left serif
numeric inner_jut; pickup tiny.nib;
if rt x2r+jut+.5u+1≤lft x4l-jut: inner_jut=jut;
else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
dish_serif(2,1,d,1/3,jut,e,1/3,jut); % lower left serif
dish_serif(4,3,f,1/3,inner_jut,g,1/3,jut); % lower middle serif
dish_serif(6,5,h,1/3,inner_jut,i,1/3,jut); fi % lower right serif
penlabels(1,2,3,4,5,6); endchar;
cmchar "The letter n";
beginchar("n",10u#,x_height#,0);
italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
pickup tiny.nib; pos1(stem,0); pos2(stem,0);
numeric shaved_stem; shaved_stem=round(stem-2stem_corr);
pos1'(shaved_stem,0); pos2'(shaved_stem,0); pos3(stem,0);
lft x1l=round(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3=w-x1;
top y1=h+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2';
filldraw stroke z1'e--z2'e; % left stem
h_stroke(2,a,3,4); % arch and right stem
if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif
numeric inner_jut; pickup tiny.nib;
if rt x2r+jut+.5u+1≤lft x4l-jut: inner_jut=jut;
else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif
dish_serif(4,3,e,1/3,inner_jut,f,1/3,jut); fi % lower right serif
penlabels(1,2,3,4); endchar;
cmchar "The letter o";
beginchar("o",9u#,x_height#,0);
italcorr .7x_height#*slant;
adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
penpos1(vair,90); penpos3(vair',-90);
penpos2(curve,180); penpos4(curve,0);
x2r=round max(.5u,1.25u-.5curve);
x4r=w-x2r; x1=x3=.5w; y1r=h+vround 1.5oo; y3r=-oo;
y2=y4=.5h-vair_corr; y2l:=y4l:=.52h;
penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
& pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle; % bowl
penlabels(1,2,3,4); endchar;
cmchar "The letter p";
beginchar("p",10u#+serif_fit#,x_height#,desc_depth#);
italcorr .5x_height#*slant+min(.5curve#-.85u#,-.1u#);
adjust_fit(serif_fit#,0);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
lft x1l=round(2.5u-.5stem'); top y1=h if serifs: +min(oo,serif_drop) fi;
numeric stem_edge; stem_edge=rt x2r;
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
pos4(vair',90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180);
rt x3l=1/3[rt x2,stem_edge]; y3=1/8[bar_height,x_height];
x4l=w-4.5u; top y4r=x_height+oo;
rt x5r=round min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=-oo;
x7=x3; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x5r,x6]);
filldraw stroke z3e{up}...{right}z4e&super_arc.e(4,5)
&super_arc.e(5,6)&z6e{left}...{up}z7e; % bowl
y0=ypart(((stem_edge,h)..(stem_edge,0))intersectionpoint(z3l{up}...{right}z4l));
pickup tiny.nib; bot y2=-d;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
z7'=z2; x8l=x7'l; bot y8=0;
filldraw stroke z7'e--z8e; % point
if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
dish_serif(2,0,b,1/3,jut,c,1/3,jut); fi % lower serif
penlabels(0,1,2,3,4,5,6,7,8); endchar;
cmchar "The letter q";
beginchar("q",10u#+serif_fit#,x_height#,desc_depth#);
italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi;
adjust_fit(0,serif_fit# if serifs: -.5u# fi);
pickup tiny.nib; pos1(stem',0); pos2(stem,0);
pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2;
rt x1r=round(w-2.5u+.5stem');
numeric stem_edge; stem_edge=lft x2l;
pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0);
pos4(vair',90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
lft x3l=2/3[lft x2,stem_edge]; y3=bar_height;
x4l=4.7u; top y4r=x_height+oo;
lft x5r=round max(1.35u-.5curve,.6u); y5=.5x_height;
x6l=x4l-.2u; bot y6r=-oo;
lft x7l=1/3[lft x2,stem_edge]; y7=min(y3,y6+y4-y3+.6vair);
(x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]);
(x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]);
filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5)
&super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl
y1=ypart(((stem_edge,h)..(stem_edge,0))intersectionpoint(z3l{up}...{left}z4l));
y0=ypart(((stem_edge,h)..(stem_edge,0))intersectionpoint(z6l{right}...{up}z7l));
pickup tiny.nib; bot y2=-d;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
pickup crisp.nib;
pos8(round(hair-stem_corr),0); pos7'(stem',0);
z7'=z1; x8r=x7'r; top y8=h+oo;
filldraw stroke z7'e--z8e; % point
if serifs: dish_serif(2,0,b,1/3,jut,c,1/3,jut); fi % lower serif
penlabels(0,1,2,3,4,5,6,7,8); endchar;
cmchar "The letter r";
numeric r_flare#; r_flare#=.75[if serifs: stem# else: vair# fi,flare#];
define_whole_blacker_pixels(r_flare);
beginchar("r",if serifs:max(7u#,5.5u#+r_flare#) else:6.5u# fi,x_height#,0);
italcorr x_height#*slant if not serifs: +.25u# fi;
adjust_fit(serif_fit#,0);
pickup fine.nib; top y4r=h+oo;
if serifs: pos4(vair,90); pos5(hair,0);
x4=5.25u; rt x5r=round(w-.5u+.5); y5+.5r_flare=.9[bar_height,h]+oo;
pos6(r_flare,0); bulb(4,5,6); % bulb
else: pos4(r_flare,90); rt x4=round(w-.25u); fi
pos3(thin_join,180); rt x3l=round(2.5u-.5stem')+stem'; top y3=bar_height;
filldraw stroke z3e{up}..{right}z4e; % arc
pickup tiny.nib; pos0(stem',0); pos2(stem',0);
pos1(round(stem-3stem_corr),0); top y1=h+min(oo,serif_drop);
pos0'(round(stem-3stem_corr),0); y0=y0'=y3; x1l=x0l=x0'l=x2l;
lft x1l=round(2.5u-.5stem'); bot y2=0;
filldraw stroke z1e--z0'e--z0e--z2e; % stem
if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
dish_serif(2,0,b,1/3,jut,c,1/3,1.25jut); fi % lower serif
penlabels(1,2,3,4,5,6); endchar;
cmchar "The letter s";
beginchar("s",7.1u#,x_height#,0);
italcorr x_height#*slant-if serifs:.55u# else:.3u# fi;
adjust_fit(if monospace: .5u#,.4u# else: 0,if serifs:0 else:-.2u# fi fi);
numeric theta; theta=90-angle(40u,h); slope:=-h/40u; % angle at middle
numeric s_slab; s_slab=if serifs:vair else:vround(.1[vair,stem])fi;
pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-100);
pos0(ess,theta); pos7(s_slab,-90); x2l=x0=x7=.5w;
top y2l=h+vround 1.5oo; bot y7r=-oo;
y0-.5ess=y7l+if serifs:.54 else: .52 fi\\(y2r-y7l-ess);
lft x3l=round .6u; rt x6r=round(w-.6u);
x3r-x3l=x6r-x6l=round(.5[s_slab,ess])-fine;
ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r;
ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r;
interim superness:=more_super;
filldraw stroke super_arc.e(2,3) & z3e{down}
..z4e---z5e..z6e{down} & super_arc.e(6,7); % main stroke
if serifs: pos1(hair,180); pos8(hair,180);
rt x1l=round(w-1.05u); lft x8r=round .6u;
bot y1=vround .7h+1; top y8=vround .35h-1;
filldraw stroke z1e{up}....{left}z2e; % upper arc
filldraw stroke z7e{left}....{x8-x7,5(y8-y7)}z8e; % lower arc
path upper_arc, lower_arc;
upper_arc=z1{up}....{left}z2; lower_arc=z7{left}....{x8-x7,5(y8-y7)}z8;
x10=x1l; top y10=top y2l; x9=x8r; bot y9=bot y7r;
x1l-x1'=x8'-x8r=1.6curve-fine; y1'=y1; y8'=y8;
numeric t; t=xpart(upper_arc intersectiontimes(z10..z1'));
filldraw z1l--z10--subpath(t,0) of upper_arc--cycle; % upper barb
t:=xpart(lower_arc intersectiontimes(z9..z8'));
filldraw z8r--z9--subpath(t,1) of lower_arc--cycle; % lower barb
else: pos1(4/7[s_slab,flare],-100); pos8(flare,-100);
x1l=good.x(x1l+w-u-rt x1); lft x8r=round .5u;
top y1l=vround(.93h+1.5oo); bot y8r=vround .1h-oo;
filldraw stroke z1e..tension.9..{left}z2e; % upper arc and terminal
filldraw stroke z7e{left}..z8e; fi % lower arc and terminal
penlabels(0,1,1',2,3,4,5,6,7,8,8',9,10); endchar;
cmchar "The letter t";
beginchar("t",6u#+max(u#,.5stem#),
min(asc_height#,if hefty:9/7 else:10/7 fi\\ x_height#),0);
italcorr x_height#*slant if serifs: -.9u# else: -.4u# fi;
adjust_fit(0,if serifs: 0 else: -.5u# fi);
numeric shaved_stem; shaved_stem=round(stem if hefty:-2stem_corr fi);
pickup fine.nib; pos2(shaved_stem,180);pos3(shaved_stem,180);
lft x2r=lft x3r=round(2.5u-.5shaved_stem); y2=y8; y3=max(.5bar_height,2vair);
pickup crisp.nib; pos8(bar,90);
rt x8=round(w-1.3u); top y8r=x_height; lft x7=round 1/3u; y7l=y8l;
if hefty: pos7(bar,90);
filldraw stroke z7e..z8e; % crossbar
pickup tiny.nib; pos1(round(shaved_stem-stem_corr),0);
rt x1r=fine.rt x2l; top y1=h;
penpos2'(x1r-x1l,0); x2'=x1; y2'=y2;
filldraw stroke z1e..z2'e; % upper terminal
else: pos7(vair,90); pos1(hair,0);
rt x1r=fine.rt x2l; top y1=h;
filldraw z1l{down}...{left}z7r--z7l--z8l
--z8r--(x1r,y8r)--z1r--cycle; fi % upper terminal and crossbar
pickup fine.nib; interim superness:=more_super;
pos4(vair',-90); bot y4r=-oo; rt x5r=round(w-u);
if serifs: pos5(hair,0); y5=y3; x4l=.5[x3l,x5l];
(x,y4r)=whatever[z4l,z5l]; x4r:=max(x,.5[x3r,x4]);
filldraw stroke z2e..super_arc.e(3,4)...{up}z5e; % stem and hook
pickup crisp.nib; pos6(hair,0); pos5'(hair,0);
x6=x5=x5'; top y6=max(vround .75bar_height,top y5); y5=y5';
filldraw stroke z5'e..z6e; % terminal
else: pos5(vair,-75); top y5l=vround(.2[top y4l,bar_height]);
x5l:=good.x x5l; x4l=1/3[x3l,x5l]; x4r:=1/3[x3r,x5r]; y3l:=y3l+.2vair;
filldraw stroke z2e..super_arc.e(3,4)
..tension .9 and atleast 1..z5e; fi; % stem, hook, and terminal
penlabels(1,2,3,4,5,6,7,8); endchar;
cmchar "The letter u";
beginchar("u",10u#,x_height#,0);
italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
if light_vair<fine.breadth: light_vair:=fine.breadth; fi
pickup tiny.nib; pos1(stem,0); pos2(stem,0);
pos3(stem,0); pos4(stem',0);
lft x1l=round(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
if serifs: top y1=h+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
else: top y1=h; bot y4=0; fi
pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
penpos5(light_vair-fine,-90); penpos6(thin_join-fine,0);
y6=y0=2/3bar_height;
filldraw stroke z1e..z2e; % left stem
filldraw stroke z3e..z0e--z0'e..z4e; % right stem
pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
(x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
filldraw stroke {{interim superness:=hein_super;
pulled_arc.e(2',5)}} & z5e{right}...{up}z6e; % arc
if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
penlabels(1,2,3,4,5); labels(6); endchar;
cmchar "The letter v";
beginchar("v",if serifs: 9.5u# else:9u# fi,x_height#,0); less_rounded;
italcorr x_height#*slant+.25u#;
adjust_fit(serif_fit# if monospace:+.5u#,.5u#+ else:,fi\\ serif_fit#);
numeric left_stem,right_stem,outer_jut,alpha;
left_stem=fudged.stem-stem_corr;
right_stem=min(fudged.hair if hefty:-2stem_corr fi,left_stem);
outer_jut=.75jut; x1l=w-x4r=l+letter_fit+outer_jut+.25u; y1=y4=h;
x2-x1=x4-x3; x2l+apex_corr=x3l; y2=y3=-apex_oo;
alpha=diag_ratio(2,right_stem,y1-y2,x4r-x1l-apex_corr);
penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0);
penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0);
z0=whatever[z1r,z2r]=whatever[z3l,z4l];
if y0>notch_cut: y0:=notch_cut;
fill z0+.5right{up}...{z4-z3}diag_end(3l,4l,1,1,4r,3r)
--diag_end(4r,3r,1,1,2l,1l)--diag_end(2l,1l,1,1,1r,2r){z2-z1}
...{down}z0+.5left--cycle; % left and right diagonals
else: fill z0--diag_end(0,4l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l)
--diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals
if serifs: numeric inner_jut; pickup tiny.nib;
prime_points_inside(1,2); prime_points_inside(4,3);
if rt x1'r+jut+.5u+1≤lft x4'l-jut: inner_jut=jut;
else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut); % left serif
dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark); fi % right serif
penlabels(0,1,2,3,4); endchar;
cmchar "The letter w";
beginchar("w",13u#,x_height#,0); less_rounded;
italcorr x_height#*slant+.25u#;
adjust_fit(serif_fit#,serif_fit#);
numeric stem[],outer_jut,upper_notch,alpha,mid_corr;
outer_jut=.7jut; x1l=w-x8r=l+letter_fit+outer_jut+.25u;
stem1=fudged.stem-stem_corr;
stem4=min(fudged.hair if hefty:-2stem_corr fi,stem1);
stem2=if hefty:.1[vair,stem4] else: stem4 fi;
stem3=max(stem2,stem1-3stem_corr);
x2-x1=x4-x3=x6-x5=x8-x7; x2l+apex_corr=x3l; x6l+apex_corr=x7l;
y1=y8=h; y2=y3=y6=y7=-apex_oo; y4=y5=if monospace: vround .6 fi\\ h;
mid_corr=if monospace or hefty:-.3apex_corr else: .5jut fi;
alpha=diag_ratio(4,stem2-stem3+stem4,y1-y2,x8r-x1l+mid_corr-2apex_corr);
penpos1(alpha*stem1,0); penpos2(alpha*stem1,0);
penpos3(alpha*stem2,0); penpos4(alpha*stem2,0);
penpos5(alpha*stem3,0); penpos6(alpha*stem3,0);
penpos7(alpha*stem4,0); penpos8(alpha*stem4,0);
x4l-x1l=floor(x4l-x1l+.5(x5r+mid_corr-x4r)); % |x5r| $\approx$ |x4r+mid_corr|
z23=whatever[z1r,z2r]=whatever[z3l,z4l];
z45=whatever[z3r,z4r]=whatever[z5l,z6l];
z67=whatever[z5r,z6r]=whatever[z7l,z8l];
upper_notch=y4-notch_cut;
fill diag_end(1l,2l,1,1,3r,4r){z4-z3}
...if y45<upper_notch:(x45,upper_notch)+.5left{up}
--(x45,upper_notch)+.5right{down} else: z45&z45 fi
...{z6-z5}diag_end(5l,6l,1,1,7r,8r)--diag_end(7r,8r,1,1,8l,7l){z7-z8}
...if y67>notch_cut:(x67,notch_cut)+.5right{down}
--(x67,notch_cut)+.5left{up} else: z67&z67 fi
...{z5-z6}special_diag_end(6,5,4,3){z3-z4}
...if y23>notch_cut:(x23,notch_cut)+.5right{down}
--(x23,notch_cut)+.5left{up} else: z23&z23 fi
...{z1-z2}diag_end(2r,1r,1,1,1l,2l)--cycle; % diagonals
if serifs: numeric inner_jut[]; pickup tiny.nib;
prime_points_inside(1,2); prime_points_inside(5,6); prime_points_inside(8,7);
if monospace: inner_jut1=inner_jut4=1.5jut;
elseif hefty: inner_jut1=inner_jut4=jut;
else: fill diag_end(6r,5r,1,1,5l,6l)--.5[z5l,z6l]
--.5[z5r,z6r]--cycle;% middle stem
inner_jut2=.7inner_jut1; inner_jut4=1.1inner_jut3;
if rt x1'r+jut+.5u+1≤lft x5'l-.7jut: inner_jut1=jut;
else: rt x1'r+inner_jut1+.5u+1=lft x5'l-inner_jut2; fi
if rt x5'r+jut+.5u+1≤lft x8'l-1.1jut: inner_jut3=jut;
else: rt x5'r+inner_jut3+.5u+1=lft x8'l-inner_jut4; fi
dish_serif(5',6,e,1/3,inner_jut2,f,1/2,inner_jut3); fi % middle serif
dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut1); % left serif
dish_serif(8',7,c,.6,inner_jut4,d,1/2,outer_jut)(dark); fi % right serif
penlabels(0,1,2,3,4,5,6,7,8,23,45,67); endchar;
cmchar "The letter x";
beginchar("x",if serifs:9.5u# else:9u# fi,x_height#,0); less_rounded;
italcorr x_height#*slant-.05u#;
adjust_fit(serif_fit# if monospace:+.5u#,.5u#+ else:,fi\\ serif_fit#);
numeric stem[],outer_jut,xjut,alpha[];
stem1=fudged.stem-4stem_corr; stem2=min(fudged.hair,stem1);
outer_jut=.75jut; xjut= if serifs: (stem1-stem2)/4 else: 0 fi;
x1l=l+letter_fit+.1u+outer_jut; x2r=r-letter_fit-.3u-outer_jut-xjut; y1=y2=h;
x3l=l+letter_fit+outer_jut+xjut; x4r=r-letter_fit-outer_jut; y3=y4=0;
alpha1=diag_ratio(1,stem1,h,x4r-x1l);
alpha2=diag_ratio(1,stem2,h,x2r-x3l);
penpos1(alpha1*stem1,0); penpos2(alpha2*stem2,0);
penpos3(alpha2*stem2,0); penpos4(alpha1*stem1,0);
if hefty: z0=whatever[z1,z4]=whatever[z2,z3];
x12=x34=x0; y13=y24=y0;
z12=whatever[z2l,z3l]; z13=whatever[z2l,z3l];
z24=whatever[z2r,z3r]; z34=whatever[z2r,z3r];
forsuffixes $=13,24,34: z$'=.2[z$,z0]; endfor
fill diag_end(12,1r,.5,1,1l,13')--z13'--diag_end(13',3l,1,.5,3r,34')--z34'
--diag_end(34',4l,.5,1,4r,24')--z24'
--diag_end(24',2r,1,.5,2l,12)--z12--cycle; % diagonals
else: fill diag_end(4r,1r,.5,1,1l,4l)
--diag_end(1l,4l,.5,1,4r,1r)--cycle; % left diagonal
fill diag_end(2l,3l,.5,1,3r,2r)
--diag_end(3r,2r,.5,1,2l,3l)--cycle; fi % right diagonal
if serifs: numeric inner_jut[]; pickup tiny.nib;
prime_points_inside(1,4); prime_points_inside(2,3);
prime_points_inside(3,2); prime_points_inside(4,1);
if rt x1'r+jut+.5u+1≤lft x2'l-jut-xjut: inner_jut1=jut;
else: rt x1'r+inner_jut1+.5u+1=lft x2'l-inner_jut1-xjut; fi
if rt x3'r+jut+.5u+1≤lft x4'l-jut-xjut: inner_jut2=jut;
else: rt x3'r+inner_jut2+.5u+1=lft x4'l-inner_jut2-xjut; fi
dish_serif(1',4,a,1/3,outer_jut,b,2/3,inner_jut1); % upper left serif
dish_serif(4',1,c,2/3,inner_jut2,d,1/3,outer_jut); % lower right serif
dish_serif(2',3,e,2/3,inner_jut1+xjut,
f,1/2,outer_jut+xjut)(dark); % upper right serif
dish_serif(3',2,g,1/2,outer_jut+xjut,
h,2/3,inner_jut2+xjut)(dark); fi % lower left serif
penlabels(0,1,2,3,4,12,13,24,34); endchar;
cmchar "The letter y";
beginchar("y",if serifs:9.5u# else:9u# fi,x_height#,desc_depth#); less_rounded;
italcorr x_height#*slant+.25u#;
adjust_fit(serif_fit# if monospace:+.5u#,.5u#+ else:,fi\\ serif_fit#);
numeric left_stem,right_stem,bot_stem,bot_vair,outer_jut;
left_stem=fudged.stem-stem_corr;
right_stem=fudged.hair if hefty:-2stem_corr fi;
bot_stem=fudged.hair if hefty:-8stem_corr fi;
bot_vair=vround(if serifs: vair else:.5[vair,bot_stem] fi);
outer_jut=.75jut;
x1l=w-x4r=l+letter_fit+outer_jut+.25u; y1=y4r=h; y2=y3=0; x2l=x3l;
numeric alpha,alpha[]; x9=3u; y9=bot_vair-d-oo;
alpha1=diag_ratio(2,bot_stem,y1-y3,x4r-x1l-apex_corr);
alpha2=diag_ratio(1,bot_stem,y1-y9,x4r-x9);
if alpha1<alpha2: x2l-x1l=x4r-x3r+apex_corr; alpha=alpha1;
else: alpha=alpha2; z3l=whatever[z9,z4r-(alpha*bot_stem,0)]; fi
penpos3(alpha*bot_stem,0); penpos4(alpha*right_stem,0);
alpha3=(y1++(x2l-x1l))/y1;
penpos1(alpha3*left_stem,0); penpos2(alpha3*left_stem,0);
z0=whatever[z1r,z2r]=z4l+whatever*(z3r-z4r);
if y0>notch_cut: y0:=notch_cut;
fill z0+.5right{up}...{z4r-z3r}diag_end(0,4l,1,1,4r,3r)
--z3r--z2l--diag_end(2l,1l,1,1,1r,2r){z2-z1}
...{down}z0+.5left--cycle; % left and right diagonals
else: fill z0--diag_end(0,4l,1,1,4r,3r)--z3r--z2l
--diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals
penpos5(alpha*bot_stem,0); z5r=whatever[z3r,z4r]; y5-.5vair=-.5d;
if serifs: numeric light_bulb; light_bulb=7/8[hair,flare]; clearpen;
penpos6(vair,-90); penpos7(hair,-180); penpos8(light_bulb,-180);
x6=2u; y6r=-d-oo; y8-.5light_bulb=-.85d; x8r=round .35u;
fill stroke z3e---z5e...{left}z6e; bulb(6,7,8); % arc and bulb
numeric inner_jut; pickup tiny.nib;
prime_points_inside(1,2); prime_points_inside(4,3);
if rt x1'r+jut+.5u+1≤lft x4'l-jut: inner_jut=jut;
else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut); % left serif
dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark); % right serif
else: penpos6(bot_vair,-90); x6=2.5u; y6r=-d-oo;
fill stroke z3e---z5e...{left}z6e; % arc
pickup fine.nib; pos6'(bot_vair,-90); z6'=z6;
pos7(2/3[bot_vair,flare],-85);
lft x7l=round u; bot y7r=vround-.96d-oo; y7l:=good.y y7l;
filldraw stroke z6'e{left}..z7e; fi % arc and terminal
penlabels(0,1,2,3,4,5,6,7,8); endchar;
cmchar "The letter z";
beginchar("z",8u#,x_height#,0); less_rounded;
italcorr x_height#*slant-.5serif_fit#-.3u#;
adjust_fit(0,.5serif_fit#);
numeric arm_thickness[],z_stem;
if hefty: arm_thickness1=vround(vair-vair_corr); arm_thickness2=vair;
z_stem=.6[vair,stem];
else: arm_thickness1=vair; arm_thickness2=vair'; z_stem=.9[vair,stem]; fi
if arm_thickness1<tiny.breadth: arm_thickness1:=tiny.breadth; fi
pickup tiny.nib; rt x1r=rt x2r=round(w-.8u); lft x3l=lft x4l=round .5u;
top y1=h; y2=min(y1,h-2/3arm_thickness1);
bot y4=0; y3=max(y4,2/3arm_thickness2);
numeric alpha; alpha=diag_ratio(1,z_stem-tiny,y2-y3,x2r-x3l-slant*(y2-y3));
penpos1(alpha*(z_stem-tiny),0); penpos2(alpha*(z_stem-tiny),0);
penpos3(alpha*(z_stem-tiny),0); penpos4(alpha*(z_stem-tiny),0);
pair delta; delta=penoffset z3-z2 of currentpen;
fill top lft z1l--z2l+delta---z3l+delta..lft z3l---lft z4l..bot z4l
---bot rt z4r--z3r-delta---z2r-delta..rt z2r---rt z1r..top z1r
---cycle; % diagonal
pickup crisp.nib; pos5(arm_thickness1,90); pos6(hair,180);
top y5r=h; x5=x1; lft x6r=round .75u; y6=good.y(y5l-beak/1.4);
arm(5,6,a,beak_darkness,-.4beak_jut); % upper arm and beak
pos7(arm_thickness2,-90); pos8(hair,0);
bot y7r=0; x7=x4; rt x8r=round(w-.75u); y8=good.y(y7l+beak/1.2);
arm(7,8,b,beak_darkness,.6beak_jut); % lower arm and beak
penlabels(1,2,3,4,5,6,7,8); endchar;